home *** CD-ROM | disk | FTP | other *** search
/ BBS in a Box 22 / AMUG_22-1.ISO / Files / Internet / Java / ET Applets 1.1.sit / ET Applets 1.1 / Common / ET_ScrollNews.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-08-01  |  10.7 KB  |  491 lines  |  [TEXT/ttxt]

  1. import java.applet.Applet;
  2. import java.awt.Color;
  3. import java.awt.Component;
  4. import java.awt.Event;
  5. import java.awt.Font;
  6. import java.awt.FontMetrics;
  7. import java.awt.Graphics;
  8. import java.awt.Image;
  9. import java.awt.MediaTracker;
  10. import java.awt.Rectangle;
  11. import java.awt.image.FilteredImageSource;
  12. import java.awt.image.ImageObserver;
  13. import java.net.MalformedURLException;
  14. import java.net.URL;
  15. import java.util.NoSuchElementException;
  16. import java.util.StringTokenizer;
  17. import java.util.Vector;
  18.  
  19. public final class ET_ScrollNews extends Applet implements Runnable {
  20.    static final boolean REG_VERSION = false;
  21.    // $FF: renamed from: RT java.lang.String
  22.    static final String field_0 = "(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)";
  23.    static final String APPLETINFO = "ET Scroll News v1.1. Visit http://www.entanke.se/ for information and more applets.";
  24.    static final String DEF_TEXT = "No TEXT parameter given.";
  25.    static final URL DEF_URL = null;
  26.    static final String DEF_TARGETFRAME = "_self";
  27.    static final String DEF_ALT = null;
  28.    static final String DEF_ALIGN = "Center";
  29.    static final int DEF_BREAK = 20;
  30.    static final int DEF_COLOR = 0;
  31.    static final int DEF_OVERCOLOR = 255;
  32.    static final int DEF_CLICKCOLOR = 16711680;
  33.    static final int DEF_BGCOLOR = 16777215;
  34.    static final URL DEF_BGIMAGE = null;
  35.    static final URL DEF_FGIMAGE = null;
  36.    static final String DEF_FONTNAME = "TimesRoman";
  37.    static final int DEF_FONTSIZE = 13;
  38.    static final int DEF_FONTSTYLE = 0;
  39.    static final int DEF_UPDATEDELAY = 75;
  40.    static final int DEF_UPDATEMOVE = 1;
  41.    Image offScreenImage;
  42.    Graphics offScreenGraphics;
  43.    Graphics appletGraphics;
  44.    private Thread kicker;
  45.    Vector parText = new Vector();
  46.    Vector parURL = new Vector();
  47.    Vector parTargetFrame = new Vector();
  48.    Vector parALT = new Vector();
  49.    Vector parAlign = new Vector();
  50.    Vector parBreak = new Vector();
  51.    Vector parFont = new Vector();
  52.    Rectangle parArea;
  53.    URL parBGImage;
  54.    URL parFGImage;
  55.    Vector parColor = new Vector();
  56.    Vector parOverColor = new Vector();
  57.    Vector parClickColor = new Vector();
  58.    Color parBGColor;
  59.    Color parTextBGColor;
  60.    int parUpdateDelay;
  61.    int parUpdateMove;
  62.    Image bgImage;
  63.    Image fgImage;
  64.    Vector textImage = new Vector();
  65.    Vector textImageOver = new Vector();
  66.    Vector textImageClick = new Vector();
  67.    Vector showImage = new Vector();
  68.    Vector showRect = new Vector();
  69.    Vector showIndex = new Vector();
  70.    private boolean updating = false;
  71.    boolean mouseDown = false;
  72.    int lastAltIndex;
  73.    Event lastEvent;
  74.    boolean isInited = false;
  75.  
  76.    public void init() {
  77.       this.offScreenImage = ((Component)this).createImage(((Component)this).size().width, ((Component)this).size().height);
  78.       this.offScreenGraphics = this.offScreenImage.getGraphics();
  79.       this.appletGraphics = ((Component)this).getGraphics();
  80.       this.parBGColor = new Color(this.getIntegerParameter("BGColor", new Integer(16777215), 16));
  81.       Integer var1 = this.getIntegerParameter("TextBGColor", (Integer)null, 16);
  82.       if (var1 == null) {
  83.          this.parTextBGColor = this.parBGColor;
  84.       } else {
  85.          this.parTextBGColor = new Color(var1);
  86.       }
  87.  
  88.       this.offScreenGraphics.setColor(this.parBGColor);
  89.       this.offScreenGraphics.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  90.       FontMetrics var2 = this.offScreenGraphics.getFontMetrics(this.offScreenGraphics.getFont());
  91.       this.offScreenGraphics.setColor(Color.gray);
  92.       this.offScreenGraphics.drawString("(loading)", (((Component)this).size().width - var2.stringWidth("(loading)")) / 2, ((Component)this).size().height / 2);
  93.       this.parBGImage = this.getURLParameter("BGImage", (URL)null);
  94.       this.parFGImage = this.getURLParameter("FGImage", (URL)null);
  95.       this.parArea = this.getAreaParameter("Area", new Rectangle(0, 0, ((Component)this).size().width, ((Component)this).size().height));
  96.       this.parUpdateDelay = this.getIntegerParameter("UpdateDelay", new Integer(75), 10);
  97.       this.parUpdateMove = this.getIntegerParameter("UpdateMove", new Integer(1), 10);
  98.       boolean var3 = true;
  99.  
  100.       for(int var4 = 1; var3; ++var4) {
  101.          if (var4 == 1) {
  102.             this.parText.addElement(this.getStringParameter("Text1", "No TEXT parameter given."));
  103.             this.parURL.addElement(this.getURLParameter("URL1", (URL)null));
  104.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame1", "_self"));
  105.             this.parALT.addElement(this.getStringParameter("ALT1", (String)null));
  106.             this.parAlign.addElement(this.getStringParameter("Align1", "Center"));
  107.             this.parBreak.addElement(this.getIntegerParameter("Break1", new Integer(20), 10));
  108.             this.parColor.addElement(this.getIntegerParameter("Color1", new Integer(0), 16));
  109.             this.parOverColor.addElement(this.getIntegerParameter("OverColor1", new Integer(255), 16));
  110.             this.parClickColor.addElement(this.getIntegerParameter("ClickColor1", new Integer(16711680), 16));
  111.             this.parFont.addElement(this.getFontParameter("FontName1", "FontStyle1", "FontSize1", new Font("TimesRoman", 0, 13)));
  112.          } else if (this.getStringParameter("Text" + var4, (String)null) != null) {
  113.             this.parText.addElement(this.getStringParameter("Text" + var4, (String)this.parText.elementAt(var4 - 2)));
  114.             this.parURL.addElement(this.getURLParameter("URL" + var4, (URL)null));
  115.             this.parTargetFrame.addElement(this.getStringParameter("TargetFrame" + var4, (String)this.parTargetFrame.elementAt(var4 - 2)));
  116.             this.parALT.addElement(this.getStringParameter("ALT" + var4, (String)null));
  117.             this.parAlign.addElement(this.getStringParameter("Align" + var4, (String)this.parAlign.elementAt(var4 - 2)));
  118.             Vector var10000 = this.parBreak;
  119.             String var5 = "Break" + var4;
  120.             var10000.addElement(this.getIntegerParameter(var5, new Integer(20), 10));
  121.             this.parColor.addElement(this.getIntegerParameter("Color" + var4, (Integer)this.parColor.elementAt(var4 - 2), 16));
  122.             this.parOverColor.addElement(this.getIntegerParameter("OverColor" + var4, (Integer)this.parOverColor.elementAt(var4 - 2), 16));
  123.             this.parClickColor.addElement(this.getIntegerParameter("ClickColor" + var4, (Integer)this.parClickColor.elementAt(var4 - 2), 16));
  124.             this.parFont.addElement(this.getFontParameter("FontName" + var4, "FontStyle" + var4, "FontSize" + var4, (Font)this.parFont.elementAt(var4 - 2)));
  125.          } else {
  126.             var3 = false;
  127.          }
  128.       }
  129.  
  130.    }
  131.  
  132.    private Integer getIntegerParameter(String var1, int var2, int var3) {
  133.       return this.getIntegerParameter(var1, new Integer(var2), var3);
  134.    }
  135.  
  136.    private Integer getIntegerParameter(String var1, Integer var2, int var3) {
  137.       String var4 = ((Applet)this).getParameter(var1);
  138.  
  139.       try {
  140.          Integer var5 = new Integer(Integer.parseInt(var4, var3));
  141.          return var5;
  142.       } catch (NumberFormatException var6) {
  143.          return var2;
  144.       }
  145.    }
  146.  
  147.    private String getStringParameter(String var1, String var2) {
  148.       String var3 = ((Applet)this).getParameter(var1);
  149.       return var3 == null ? var2 : var3;
  150.    }
  151.  
  152.    private URL getURLParameter(String var1, URL var2) {
  153.       String var3 = this.getStringParameter(var1, (String)null);
  154.  
  155.       try {
  156.          URL var4 = new URL(((Applet)this).getDocumentBase(), var3);
  157.          return var4;
  158.       } catch (MalformedURLException var5) {
  159.          return var2;
  160.       }
  161.    }
  162.  
  163.    private Rectangle getAreaParameter(String var1, Rectangle var2) {
  164.       String var3 = this.getStringParameter(var1, (String)null);
  165.       if (var3 == null) {
  166.          return var2;
  167.       } else {
  168.          StringTokenizer var4 = new StringTokenizer(var3);
  169.          return new Rectangle(Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()), Integer.parseInt(var4.nextToken()));
  170.       }
  171.    }
  172.  
  173.    private Font getFontParameter(String var1, String var2, String var3, Font var4) {
  174.       String var5 = this.getStringParameter(var1, var4.getName());
  175.       String var6 = this.getStringParameter(var2, "");
  176.       int var7 = var4.getSize();
  177.       var7 = this.getIntegerParameter(var3, new Integer(var7), 10);
  178.       int var8 = var4.getStyle();
  179.       if (var6.equalsIgnoreCase("Plain")) {
  180.          var8 = 0;
  181.       }
  182.  
  183.       if (var6.equalsIgnoreCase("Bold")) {
  184.          var8 = 1;
  185.       }
  186.  
  187.       if (var6.equalsIgnoreCase("Italic")) {
  188.          var8 = 2;
  189.       }
  190.  
  191.       if (var6.equalsIgnoreCase("BoldItalic")) {
  192.          var8 = 3;
  193.       }
  194.  
  195.       return new Font(var5, var8, var7);
  196.    }
  197.  
  198.    public void makeTextVector(Vector var1, Vector var2, int var3, Integer var4, FontMetrics var5) {
  199.       Color var6 = new Color(var4);
  200.       Image var7 = ((Component)this).createImage(this.parArea.width, var5.getHeight() * var2.size());
  201.       Graphics var8 = var7.getGraphics();
  202.       Color var9 = null;
  203.       if (this.parBGImage != null) {
  204.          int var10 = var6.getRGB() & 16777215;
  205.          int var11 = var10 >> 16 & 255;
  206.          int var12 = var10 >> 8 & 255;
  207.          int var13 = var10 & 255;
  208.          if ((var11 + var12 + var13) / 3 > 128) {
  209.             var9 = Color.black;
  210.          } else {
  211.             var9 = Color.white;
  212.          }
  213.  
  214.          var8.setColor(var9);
  215.       } else {
  216.          var8.setColor(this.parTextBGColor);
  217.       }
  218.  
  219.       var8.fillRect(0, 0, this.parArea.width, var5.getHeight() * var2.size());
  220.       var8.setFont((Font)this.parFont.elementAt(var3));
  221.       var8.setColor(var6);
  222.  
  223.       for(int var15 = 0; var15 < var2.size(); ++var15) {
  224.          int var14;
  225.          if (((String)this.parAlign.elementAt(var3)).equalsIgnoreCase("Left")) {
  226.             var14 = 0;
  227.          } else if (((String)this.parAlign.elementAt(var3)).equalsIgnoreCase("Right")) {
  228.             var14 = this.parArea.width - var5.stringWidth((String)var2.elementAt(var15));
  229.          } else {
  230.             var14 = (this.parArea.width - var5.stringWidth((String)var2.elementAt(var15))) / 2;
  231.          }
  232.  
  233.          var8.drawString((String)var2.elementAt(var15), var14, var5.getHeight() * var15 + var5.getAscent());
  234.       }
  235.  
  236.       if (this.parBGImage != null) {
  237.          FilteredImageSource var16 = new FilteredImageSource(var7.getSource(), new ET_TransFilter(var9.getRGB()));
  238.          var1.addElement(((Component)this).createImage(var16));
  239.       } else {
  240.          var1.addElement(var7);
  241.       }
  242.    }
  243.  
  244.    public String getAppletInfo() {
  245.       return "ET Scroll News v1.1. Visit http://www.entanke.se/ for information and more applets.";
  246.    }
  247.  
  248.    public void start() {
  249.       if (this.kicker == null) {
  250.          this.kicker = new Thread(this);
  251.          this.kicker.start();
  252.       }
  253.  
  254.    }
  255.  
  256.    public void stop() {
  257.       if (this.kicker != null && this.kicker.isAlive()) {
  258.          this.kicker.stop();
  259.       }
  260.  
  261.       this.kicker = null;
  262.    }
  263.  
  264.    public void destroy() {
  265.       this.kicker = null;
  266.    }
  267.  
  268.    public final void update(Graphics var1) {
  269.       if (!this.updating) {
  270.          var1.drawImage(this.offScreenImage, 0, 0, this);
  271.       }
  272.  
  273.    }
  274.  
  275.    private final void updateOffScreen() {
  276.       this.updating = true;
  277.       if (this.bgImage != null) {
  278.          this.offScreenGraphics.drawImage(this.bgImage, 0, 0, this);
  279.       }
  280.  
  281.       for(int var1 = this.showImage.size() - 1; var1 >= 0; --var1) {
  282.          this.offScreenGraphics.drawImage((Image)this.showImage.elementAt(var1), ((Rectangle)this.showRect.elementAt(var1)).x, ((Rectangle)this.showRect.elementAt(var1)).y, this);
  283.       }
  284.  
  285.       if (this.fgImage != null) {
  286.          this.offScreenGraphics.drawImage(this.fgImage, 0, 0, this);
  287.       }
  288.  
  289.       this.updating = false;
  290.    }
  291.  
  292.    public final void paint(Graphics var1) {
  293.       if (!this.updating) {
  294.          var1.drawImage(this.offScreenImage, 0, 0, this);
  295.       }
  296.  
  297.    }
  298.  
  299.    private void fixTextColors(Event var1) {
  300.       if (var1 != null) {
  301.          this.lastEvent = var1;
  302.       }
  303.  
  304.       if (this.lastEvent != null) {
  305.          int var2 = -1;
  306.  
  307.          for(int var3 = 0; var3 < this.showRect.size(); ++var3) {
  308.             int var4 = (Integer)this.showIndex.elementAt(var3);
  309.             Object var5 = null;
  310.             if (((Rectangle)this.showRect.elementAt(var3)).inside(this.lastEvent.x, this.lastEvent.y) && this.parArea.inside(this.lastEvent.x, this.lastEvent.y) && this.parURL.elementAt(var4) != null) {
  311.                if (this.lastEvent.id == 502) {
  312.                   ((Applet)this).getAppletContext().showDocument((URL)this.parURL.elementAt(var4), (String)this.parTargetFrame.elementAt(var4));
  313.                }
  314.  
  315.                if (this.mouseDown) {
  316.                   var5 = this.textImageClick.elementAt(var4);
  317.                } else {
  318.                   var5 = this.textImageOver.elementAt(var4);
  319.                }
  320.  
  321.                var2 = var4;
  322.             } else {
  323.                var5 = this.textImage.elementAt(var4);
  324.             }
  325.  
  326.             this.showImage.setElementAt(var5, var3);
  327.          }
  328.  
  329.          if (this.lastAltIndex != var2) {
  330.             if (var2 != -1 && this.parALT.elementAt(var2) != null) {
  331.                ((Applet)this).showStatus((String)this.parALT.elementAt(var2));
  332.             } else {
  333.                ((Applet)this).showStatus("(This applet is not for commercial use. Visit http://www.entanke.se/ for information and more applets.)");
  334.             }
  335.          }
  336.  
  337.          this.lastAltIndex = var2;
  338.       }
  339.    }
  340.  
  341.    public boolean handleEvent(Event var1) {
  342.       switch (var1.id) {
  343.          case 501:
  344.             this.mouseDown = true;
  345.             this.fixTextColors(var1);
  346.             return true;
  347.          case 502:
  348.             this.mouseDown = false;
  349.             this.fixTextColors(var1);
  350.             return true;
  351.          case 503:
  352.          case 504:
  353.          case 505:
  354.          case 506:
  355.             this.fixTextColors(var1);
  356.             return true;
  357.          default:
  358.             return super.handleEvent(var1);
  359.       }
  360.    }
  361.  
  362.    public void run() {
  363.       if (!this.isInited) {
  364.          Graphics var1 = this.appletGraphics;
  365.          if (!this.updating) {
  366.             var1.drawImage(this.offScreenImage, 0, 0, this);
  367.          }
  368.  
  369.          for(int var11 = 0; var11 < this.parText.size(); ++var11) {
  370.             Vector var2 = new Vector();
  371.             StringTokenizer var3 = new StringTokenizer((String)this.parText.elementAt(var11), " ", true);
  372.             FontMetrics var4 = this.appletGraphics.getFontMetrics((Font)this.parFont.elementAt(var11));
  373.             String var5 = "";
  374.             String var6 = "";
  375.  
  376.             try {
  377.                while(true) {
  378.                   var6 = "";
  379.                   if (var4.stringWidth(var5) >= this.parArea.width) {
  380.                      var6 = var5;
  381.                      var5 = var3.nextToken();
  382.                   } else {
  383.                      while(var4.stringWidth(var6 + var5) < this.parArea.width) {
  384.                         var6 = var6 + var5;
  385.                         var5 = var3.nextToken();
  386.                      }
  387.                   }
  388.  
  389.                   var2.addElement(var6.trim());
  390.                }
  391.             } catch (NoSuchElementException var10) {
  392.                if (var6 != "") {
  393.                   var2.addElement(var6);
  394.                }
  395.  
  396.                this.makeTextVector(this.textImage, var2, var11, (Integer)this.parColor.elementAt(var11), var4);
  397.                this.makeTextVector(this.textImageOver, var2, var11, (Integer)this.parOverColor.elementAt(var11), var4);
  398.                this.makeTextVector(this.textImageClick, var2, var11, (Integer)this.parClickColor.elementAt(var11), var4);
  399.             }
  400.          }
  401.  
  402.          MediaTracker var13 = new MediaTracker(this);
  403.          this.bgImage = ((Component)this).createImage(((Component)this).size().width, ((Component)this).size().height);
  404.          Graphics var16 = this.bgImage.getGraphics();
  405.          var16.setColor(this.parBGColor);
  406.          var16.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  407.          Image var18 = null;
  408.  
  409.          try {
  410.             var18 = ((Applet)this).getImage(this.parBGImage);
  411.             var13.addImage(var18, 1);
  412.          } catch (NullPointerException var9) {
  413.          }
  414.  
  415.          try {
  416.             this.fgImage = ((Applet)this).getImage(this.parFGImage);
  417.             var13.addImage(this.fgImage, 2);
  418.          } catch (NullPointerException var8) {
  419.          }
  420.  
  421.          try {
  422.             var13.waitForAll();
  423.          } catch (InterruptedException var7) {
  424.          }
  425.  
  426.          if (var18 != null) {
  427.             var16.drawImage(var18, 0, 0, this);
  428.          } else {
  429.             var16.setColor(this.parTextBGColor);
  430.             var16.fillRect(0, 0, ((Component)this).size().width, ((Component)this).size().height);
  431.          }
  432.  
  433.          this.updateOffScreen();
  434.          Graphics var19 = this.appletGraphics;
  435.          if (!this.updating) {
  436.             var19.drawImage(this.offScreenImage, 0, 0, this);
  437.          }
  438.  
  439.          this.offScreenGraphics.clipRect(this.parArea.x, this.parArea.y, this.parArea.width, this.parArea.height);
  440.          Image var20 = (Image)this.textImage.firstElement();
  441.          this.showImage.addElement(var20);
  442.          this.showRect.addElement(new Rectangle(this.parArea.x, this.parArea.y + this.parArea.height, var20.getWidth((ImageObserver)null), var20.getHeight((ImageObserver)null)));
  443.          this.showIndex.addElement(new Integer(0));
  444.          this.isInited = true;
  445.       }
  446.  
  447.       int var12 = 0;
  448.  
  449.       while(true) {
  450.          this.fixTextColors((Event)null);
  451.          this.updateOffScreen();
  452.          Graphics var14 = this.appletGraphics;
  453.          if (!this.updating) {
  454.             var14.drawImage(this.offScreenImage, 0, 0, this);
  455.          }
  456.  
  457.          for(int var15 = 0; var15 < this.showRect.size(); ++var15) {
  458.             Rectangle var10000 = (Rectangle)this.showRect.elementAt(var15);
  459.             var10000.y -= this.parUpdateMove;
  460.          }
  461.  
  462.          if (((Rectangle)this.showRect.firstElement()).y + ((Rectangle)this.showRect.firstElement()).height < this.parArea.y) {
  463.             this.showImage.removeElementAt(0);
  464.             this.showRect.removeElementAt(0);
  465.             this.showIndex.removeElementAt(0);
  466.          }
  467.  
  468.          if (((Rectangle)this.showRect.lastElement()).y + ((Rectangle)this.showRect.lastElement()).height < this.parArea.height + this.parArea.y) {
  469.             ++var12;
  470.             if (var12 == this.textImage.size()) {
  471.                var12 = 0;
  472.             }
  473.  
  474.             Image var17 = (Image)this.textImage.elementAt(var12);
  475.             this.showImage.addElement(var17);
  476.             this.showRect.addElement(new Rectangle(this.parArea.x, ((Rectangle)this.showRect.lastElement()).y + ((Rectangle)this.showRect.lastElement()).height + (Integer)this.parBreak.elementAt((Integer)this.showIndex.lastElement()), var17.getWidth((ImageObserver)null), var17.getHeight((ImageObserver)null)));
  477.             this.showIndex.addElement(new Integer(var12));
  478.          }
  479.  
  480.          this.delay(this.parUpdateDelay);
  481.       }
  482.    }
  483.  
  484.    private void delay(int var1) {
  485.       try {
  486.          Thread.sleep((long)var1);
  487.       } catch (InterruptedException var2) {
  488.       }
  489.    }
  490. }
  491.